function cartlist() {

    if (localStorage.getItem("localsid") && localStorage.getItem("localnum")) {
        let arrsid = localStorage.getItem("localsid").split(",")
        let arrnum = localStorage.getItem("localnum").split(",")

        $.ajax({
            url: "http://10.31.155.75/mogujie/php/alldata.php",
            dataType: "json"
        }).done(function(data) {
            for (let i = 0; i < arrsid.length; i++) {
                $.each(data, function(index, value) {
                    if (arrsid[i] == value.sid) {
                        const clonebox = $(".databox:hidden").clone(true)
                        clonebox.attr("sid", value.sid)
                        clonebox.find(".desc a img").attr("src", value.url)
                        clonebox.find(".item_info a").html(value.title)
                        clonebox.find(".item_price").html(value.price)
                        clonebox.find(".input_num").val(arrnum[i])
                        clonebox.find(".input_num").attr("value", arrnum[i])
                        clonebox.find(".item_sum").html((value.price * arrnum[i]).toFixed(2))

                        clonebox.css("display", "block")
                        $(".cart_item").append(clonebox)
                    }
                })

            }

            const h_select = $("#s_all") // 头部全选按钮
            const shop_select = $(".shop_info input") // 商家店铺全选按钮
            const f_select = $("#all_s") // 底部区域全选按钮
            const items_select = $(".s_item") // 单个商品选中按钮


            function allCheck(obj) { // 三个全选按钮的点击事件，checked值为true表示所有复选框按钮皆被选中，反之则全部选中
                obj.on("click", function() {
                    if (obj.prop("checked")) {
                        h_select.prop("checked", true)
                        shop_select.prop("checked", true)
                        f_select.prop("checked", true)
                        items_select.prop("checked", true)
                        priceTotal()
                        countTotal()
                    } else {
                        h_select.prop("checked", false)
                        shop_select.prop("checked", false)
                        f_select.prop("checked", false)
                        items_select.prop("checked", false)
                        priceTotal()
                        countTotal()
                    }
                })
            }

            allCheck(h_select)
            allCheck(shop_select)
            allCheck(f_select)

            oneChecked() // 调用单个商品复选框点击事件

            // 单个商品点击复选框按钮监听是否全部选中，利用标记思想
            function oneChecked() {
                if (items_select.length > 1) {
                    items_select.on("click", function() {
                        let selectFlag = true // 标记思想
                        $.each(items_select, function(index, value) {
                            if (!value.checked) {
                                selectFlag = false
                            }
                        })
                        if (selectFlag) {
                            h_select.prop("checked", true)
                            shop_select.prop("checked", true)
                            f_select.prop("checked", true)
                            priceTotal()
                            countTotal()
                        } else {
                            h_select.prop("checked", false)
                            shop_select.prop("checked", false)
                            f_select.prop("checked", false)
                            priceTotal()
                            countTotal()
                        }
                    })
                } else {
                    allCheck(items_select)
                }
            }


            // 单个商品输入框输入数量
            const oInputs = $(".input_num")
            const reducesum = $(".num_reduce")
            const addsum = $(".num_add")

            // 点击添加按钮，数量加一，并计算数额
            addsum.on("click", function() {
                let addnum = parseInt($(this).siblings(".input_num").attr("value")) + 1
                console.log(addnum)
                if (addnum > 1) {
                    $(this).siblings(".num_reduce").css("cursor", "pointer")
                }
                $(this).siblings(".input_num").val(`${addnum}`)
                $(this).siblings(".input_num").attr("value", `${addnum}`)
                console.log($(this).siblings(".input_num").attr("value"))
                numChange($(this), addnum)
                priceTotal()
                countTotal()
                let sid = $(this).parents(".databox").attr("sid")
                localchange(sid, addnum)

                // let sum = $(this).parents("ul").find(".item_price").html() * addnum
                // $(this).parents("ul").find(".item_sum").html(sum.toFixed(2))
            })

            // 点击减少按钮，判断里面的值是否为1，如果是1则将按钮禁用，反之则数量减一并且计算小计
            reducesum.on("click", function() {
                if ($(this).css("cursor") !== "not-allowed") {
                    let reducenum = $(this).siblings(".input_num").attr("value")
                    if (reducenum > 1) {
                        reducenum -= 1
                        $(this).siblings(".input_num").val(reducenum)
                        $(this).siblings(".input_num").attr("value", reducenum)
                        numChange($(this), reducenum)
                        priceTotal()
                        countTotal()
                        let sid = $(this).parents(".databox").attr("sid")
                        localchange(sid, reducenum)

                        // let sum = $(this).parents("ul").find(".item_price").html() * reducenum
                        // $(this).parents("ul").find(".item_sum").html(sum.toFixed(2))
                    } else {
                        $(this).css("cursor", "not-allowed")
                    }
                }
            })

            // 监听输入框数值改变事件，判断用户输入的是否为数字类型，不是则提示用户重新输入并重置
            oInputs.on("input", function() {
                let sid = $(this).parents(".databox").attr("sid")
                if (!isNaN($(this).val())) {
                    if ($(this).val() > 1) {
                        $(this).siblings(".num_reduce").css("cursor", "pointer")
                    } else {
                        $(this).siblings(".num_reduce").css("cursor", "not-allowed")
                    }
                    $(this).attr("value", $(this).val())
                    numChange($(this), $(this).val())
                    priceTotal()
                    countTotal()
                    localchange(sid, $(this).val())

                    // const itemsum = $(this).parents("ul").find(".item_sum")
                    // let sum = $(this).val() * itemprice
                    // itemsum.html(sum.toFixed(2))
                } else {
                    // 弊端: 没有保存上一次的值，直接重置为1，影响用户体验
                    alert("您的输入有误(非数值类型)，请重新输入购买商品数额")
                    $(this).val(1)
                    $(this).attr("value", 1)
                    $(this).siblings(".num_reduce").css("cursor", "not-allowed")
                    numChange($(this), 1)
                    countTotal()
                    priceTotal()
                    localchange(sid, 1)
                }

            })

            // 封装通过输入框输入或者点击加号减号改变购买数量的函数
            function numChange(obj, num) { // obj:代表输入框对象或者加号减号元素对象 num:表示改变后的商品数量值
                let sum = num * obj.parents("ul").find(".item_price").html()
                obj.parents("ul").find(".item_sum").html(sum.toFixed(2))
            }

            // 将商品全部删除
            const removeAll = $(".remove_all") // 全部删除按钮
            const goodItems = $(".cart_item") // 购物车包裹所有商品的盒子
            removeAll.on("click", function() {
                if (window.confirm("您确定是要清除购物车内所有商品吗?")) {
                    goodItems.empty()
                    priceTotal()
                    countTotal()
                    h_select.prop("checked", false)
                    shop_select.prop("checked", false)
                    f_select.prop("checked", false)
                    localStorage.removeItem("localsid")
                    localStorage.removeItem("localnum")
                }
            })

            // 删除单个商品
            const delGood = $(".good_del")
            delGood.on("click", function() {
                if (window.confirm("您确定是要将该商品删除购物车吗?")) {
                    if ($(".cart_item ul").length == 1) {
                        h_select.prop("checked", false)
                        shop_select.prop("checked", false)
                        f_select.prop("checked", false)
                    }
                    $(this).parents("ul").remove()
                    priceTotal()
                    countTotal()
                    oneChecked()
                    let sid = $(this).parents(".databox").attr("sid")
                    arrsid.splice(arrsid.indexOf(sid), 1)
                    arrnum.splice(arrsid.indexOf(sid), 1)
                    localStorage.setItem("localsid", arrsid)
                    localStorage.setItem("localnum", arrnum)
                }
            })

            // 删除选中项商品
            const delSelect = $(".del_select")
            delSelect.on("click", function() {
                if (window.confirm("是否清空选中项商品?")) {
                    const gooditems = $(".cart_item .s_item")
                    $.each(gooditems, function(index, value) {
                        console.log(value)
                        if (value.checked) {
                            let sid = $(value).parents(".databox").attr("sid")
                            $(value).parents(".databox").remove()
                            countTotal()
                            priceTotal()
                            arrsid.splice(arrsid.indexOf(sid), 1)
                            arrnum.splice(arrsid.indexOf(sid), 1)
                            localStorage.setItem("localsid", arrsid)
                            localStorage.setItem("localnum", arrnum)
                        }
                    })
                }
            })

            // 统计商品总数
            const totalNum = $(".count")

            // 商品数量统计函数
            function countTotal() {
                let sum = 0
                const oInputs = $(".cart_item .input_num")
                if (oInputs) {
                    $.each(oInputs, function(index, val) {
                        if ($(val).parents("ul").find(".s_item").prop("checked")) {
                            sum += parseInt(val.value)
                        }
                    })
                    totalNum.html(sum)
                } else {
                    totalMoney.html(0)
                }

            }

            // 统计商品总价
            const totalMoney = $(".cart_money")

            // 商品总价计算函数
            function priceTotal() {
                let money = 0
                const itemsums = $(".cart_item .item_sum")
                if (itemsums) {
                    $.each(itemsums, function(index, val) {
                        if ($(val).parents("ul").find(".s_item").prop("checked")) {
                            money += parseFloat(val.innerHTML)
                        }
                    })
                    money = "¥ " + money.toFixed(2)
                    totalMoney.html(money)
                } else {
                    totalMoney.html("¥ 0.00")
                }
            }

            priceTotal()
            countTotal()

            // 改变商品数量将其保存到本地存储中
            function localchange(sid, num) {
                arrnum[arrsid.indexOf(sid)] = num
                localStorage.setItem("localnum", arrnum)
            }

        })
    }

}

// 看不到底部支付总计框时让其固定在底部区域
function fixedFooter() {
    const cartbar = $(".cart_paybar")
    let t = cartbar.offset().top
    let viewHeight = $(window).height()
    $(window).scroll(function() {
        let top = $(window).scrollTop()
        if (t > top + viewHeight) {
            cartbar.css({
                position: "fixed",
                bottom: 0,
                zIndex: 100
            })
        } else {
            cartbar.css({
                position: "relative"
            })
        }
    })
}

export {
    cartlist,
    fixedFooter
}